﻿<?php 
/**
* @file register.php
* Copyright (c) Friends Group. All rights reserved.
* $Id$
*
*/

require_once(realpath(dirname(__FILE__)) . '/config.php');
require_once(realpath(dirname(__FILE__)) . '/includes/common/ServiceFactory.php');

Session::start();

$commonService = ServiceFactory::get();
$userService = ServiceFactory::get("UserService");
$config = ServiceFactory::get("SystemConfiguration");
$themeDir = "themes/" . $config -> getSetting("theme");

$action = $_REQUEST['step'];
$referer = $_POST['referer'];

if(empty($action) || !$action)
{
    if (isset($_POST['submit']))
    {
        RedirectMessage::removeMessage();
        
        $username = $_POST['username'];
        $email = $_POST['email'];
        $firstname = $_POST['firstname'];
        $lastname = $_POST['lastname'];
        $phone = $_POST['phone'];
        $address = $_POST['address'];
        $pass = $_POST['password'];
        $pass1 = $_POST['passwordRetype'];
        
        $bdMonth = $_POST['birthdayMonth'];
        $bdYear = $_POST['birthdayYear'];
        $bdDay = $_POST['birthdayDay'];
        
        if(!empty($pass) && $pass != $pass1)
            RedirectMessage::info("Mật khẩu nhập không giống nhau", "Error");
        elseif(!Validator::validate($email, "email"))
            RedirectMessage::info("Email không hợp lệ", "Error");
        elseif(!Validator::validate($phone, "phone"))
            RedirectMessage::info("Số điện thoại không hợp lệ", "Error");
        elseif(!Validator::validate($pass, "password"))
            RedirectMessage::info("Mật khẩu không hợp lệ, mật khẩu chỉ chứa các chữ cái và số", "Error");
        elseif(empty($bdMonth) || empty($bdYear) || empty($bdDay))
            RedirectMessage::info("Bạn chưa nhập ngày sinh", "Error");
        elseif(!Validator::validate($bdDay . "/" . $bdMonth . "/" . $bdYear,"date"))
            RedirectMessage::info("Ngày sinh không hợp lệ", "Error");
        
        if(RedirectMessage::hasMessage())
            Response::redirect($referer);
        
        $birthday = $bdYear . "/" . $bdMonth . "/" . $bdDay;
        
        try
        {
            $user = new Account($username, $pass, $email, $birthday, $firstname, $lastname, $address, $phone);
            $userService -> createUser($user);
            
            $userService -> setUserOption($user -> getID(), "show-email", isset($_POST['showEmail'])?"1":"0");
            
            Response::redirect(Response::addQueryArg(array("step" => "2", "cid" => $user -> getID()), $_SERVER['PHP_SELF']));
        }
        catch(Exception $ex)
        {
            RedirectMessage::info($ex -> getMessage(), "Error");
        }
       
        Response::redirect($referer);
    }
}
elseif($action == "2")
{
    include($themeDir . "/reg-header.php");
    
    if(RedirectMessage::hasMessage())
    {
        InfoArea::showInfo(RedirectMessage::getMessage(), RedirectMessage::getMessage('title'), RedirectMessage::getMessage('type'));
        RedirectMessage::removeMessage();
    }
    
    if(isset($_REQUEST['cid']) && $userService -> isExistUserId($_REQUEST['cid']))
    {
        if($config -> getSetting("user-must-activate") == "1")
        {
            $user = $userService -> findUserById($_REQUEST['cid']);
            $timeout = $userService -> isActivationKeyTimeout($user);
            $key = $user -> getActivationKey();
            $checkKey = $_REQUEST['activateKey'];
            if(!empty($key) && $user -> getAccountStatus() != "1" && !$timeout && empty($checkKey))
            {
                $next = Response::addQueryArg(array("step" => "2"), $_SERVER['PHP_SELF']);
                $cid = $_REQUEST['cid'];
                echo "<form action='$next' method='post' id='register' class='FancyForm'>";
                echo "<p>Một email chứa các thông tin kích hoạt tài đã được gửi đến bạn, hãy kiểm tra email để lấy mã kích hoạt, và nhập mã kích hoạt vào đây để tiếp tục</p>";
                echo "<input type='text' name='activateKey' id='activateKey' size='35' maxlength='100' />";
                echo "<input type='hidden' name='cid' id='cid' value='{$cid}' />";
                echo "<input type='submit' name='submit-key' id='next' value='Confirm activation code' />";
                echo "</form>";
            }
            else
            {
                try
                {
                    if($userService -> activateAccount($user, $checkKey))
                    {
                        echo "<form class='FancyForm'>";
                        echo "<p>Tài khoản của bạn đã được kích hoạt thành công, bạn có thể thay đổi thông tin cá nhân <a href='./admin/profile.php'>ở đây</a>, hoặc bạn có thể <a href='./index.php'>login</a> tham gia Now!Chat ngay bây giờ.</p>";
                        echo "</form>";
                    }
                }
                catch(Exception $ex)
                {
                    RedirectMessage::info($ex -> getMessage(), "Error");
                }
            }
        }
        else
        {
            echo "<form class='FancyForm'>";
            echo "<p>Tài khoản của bạn đã được tạo thành công, bạn có thể thay đổi thông tin cá nhân <a href='./admin/profile.php'>ở đây</a>, hoặc bạn có thể <a href='./index.php'>login</a> tham gia Now!Chat ngay bây giờ.</p>";
            echo "</form>";
        }    
    }
    else
        Response::redirect("./register.php");
    
    include($themeDir . "/footer.php");
    exit();
}

include($themeDir . "/reg-header.php");

?>
    <script type="text/javascript">
        function validateDate(field, caption)
        {
            var month = $('div.Birthday select#birthdayMonth').val().toInt();
            var day = $('div.Birthday input#birthdayDay').val().toInt();
            var year = $('div.Birthday input#birthdayYear').val().toInt();
            
            if(year < 1900 || year > 2000)
                return 'Năm hợp lệ từ năm 1900 đến 2000.';
            
            if(day > 31 || day < 0)
                return 'Ngày phải nằm trong khoảng 1-31.';
            
            if(month > 12 || month < 0)
                return 'Tháng phải nằm trong khoảng 1-12.';
                
            var maxDay = 0;
            if(month == 2){
                if(year % 400 == 0 || year % 4 == 0 && year % 100 > 0)
                    maxDay = 29;
                else
                    maxDay = 28;
            }
            else if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
                maxDay = 31;
            else 
                maxDay = 30;
            
            if(day > maxDay)
                return 'Tháng ' + month + ' năm ' + year + ' không có ' + day + ' ngày';
            
        }
    </script>
    
    <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" id="register" class="FancyForm">
        <?php
            if(RedirectMessage::hasMessage())
            {
                InfoArea::showInfo(RedirectMessage::getMessage(), RedirectMessage::getMessage('title'), RedirectMessage::getMessage('type'));
                RedirectMessage::removeMessage();
            }
        ?>
        <input type="hidden" value="<?php echo ($_SERVER['REQUEST_URI']); ?>" name="referer" />
        <fieldset class="InlineLabels">
          <legend>Thông tin bắt buộc</legend>
          
          <div class="CtrlHolder">
            <label for="username"><em>*</em> Tên đăng nhập</label>
            <input name="username" id="username" value="" size="25" maxlength="25" type="text" class="TextInput ValidateMinLength 3 ValidateMaxLength 25 ValidateAlphaNum" />
            <p class="FormHint">
                Tên đăng nhập của bạn, tên hợp lệ chỉ chứa các chữ cái và số, tối đa 25 ký tự
            </p>
          </div>
          
          <div class="CtrlHolder">
            <label for="email"><em>*</em> Địa chỉ Email</label>
            <input name="email" id="email" value="" size="50" maxlength="50" type="text" class="TextInput ValidateEmail" />
            <p class="FormHint">Chú ý: Mã kích hoạt tài khoản sẽ được gửi đến mail của bạn, vì thế hãy chọn email hợp lệ.</p>
          </div>
          
          <div class="CtrlHolder">
            <label for="password"><em>*</em> Mật khẩu</label>
            <input name="password" id="password" value="" size="16" maxlength="16" type="password" class="TextInput ValidateMinLength 3 ValidateMaxLength 16 ValidateAlphaNum" />
            <p class="FormHint">
              Mật khẩu hợp lệ chỉ chứa các chữ cái và số, tối đa 16 ký tự
            </p>
          </div>
            
          <div class="CtrlHolder">
            <label for="passwordRetype"><em>*</em> Nhập lại mật khẩu</label>
            <input name="passwordRetype" id="passwordRetype" value="" size="16" maxlength="16" type="password" class="TextInput ValidateSameAs password" />
          </div>
            
          <div class="CtrlHolder">
            <label><em>*</em> Ngày sinh</label>
            <div class="Birthday">
                <select id="birthdayMonth" name="birthdayMonth" class="Required ValidateCallback validateDate">
                    <option value="1">Tháng 1</option><option value="2">Tháng 2</option><option value="3">Tháng 3</option><option value="4">Tháng 4</option>
                    <option value="5">Tháng 5</option><option value="6">Tháng 6</option><option value="7">Tháng 7</option><option value="8">Tháng 8</option>
                    <option value="9">Tháng 9</option><option value="10">Tháng 10</option><option value="11">Tháng 11</option><option value="12">Tháng 12</option>
                </select>
                <label for="birthdayDay">Ngày</label>
                <input name="birthdayDay" id="birthdayDay" value="" size="2" maxlength="2" type="text" class="TextInput Required ValidateCallback validateDate" />
                <label for="birthdayYear">Năm</label>
                <input name="birthdayYear" id="birthdayYear" value="" size="4" maxlength="4" type="text" class="TextInput Required ValidateCallback validateDate" />
            </div>
          </div>
          
        </fieldset>
        
        <fieldset class="InlineLabels">
          <legend>Thông tin tùy chọn</legend>
          
          <div class="CtrlHolder">
            <label for="firstname">Họ và tên đệm</label>
            <input name="firstname" id="firstname" value="" size="35" maxlength="20" type="text" class="TextInput" />
          </div>
            
          <div class="CtrlHolder">
            <label for="lastname">Tên</label>
            <input name="lastname" id="lastname" value="" size="35" maxlength="20" type="text" class="TextInput" />
          </div>
            
          <div class="CtrlHolder">
            <label for="phone">Số điện thoại</label>
            <input name="phone" id="phone" value="" size="35" maxlength="11" type="text" class="TextInput" />
          </div>
          
          <div class="CtrlHolder">
            <label for="address">Địa chỉ</label>
            <input name="address" id="address" value="" size="35" maxlength="255" type="text" class="TextInput" />
          </div>
          
          <div class="CtrlHolder">
            <p class="Label">
              Hiển thị:
            </p>
              <label for="showEmail" class="InlineLabel"><input name="showEmail" id="showEmail" type="checkbox" checked="checked" /> Hiện email</label>
          </div>
        
        </fieldset>
        
      <div id="errorMsg">
        <h3>Lỗi!, vui lòng kiểm tra lại các thông tin.</h3>
        <ol>
        </ol>
      </div>
      
        <div class="ButtonHolder">
          <input type="reset" name="reset" class="ResetButton" value="Nhập lại" />
          <input type="submit" name="submit" class="SubmitButton" value="Tạo tài khoản" />
        </div>

    </form>
<?php include($themeDir . "/footer.php") ?>